Electronic devices generate random sequences for cryptography or other uses, such as gambling, statistical sampling, computer simulation, and other areas where a random sequence is useful in producing an unpredictable result.
Some electronic devices are configured to generate random sequences using a hardware random number generator. However some electronic devices are configured to generate random sequences without hardware random number generators. These electronic devices rely on software to generate random sequences. Software of this nature is referred to as a “pseudo random number generator” (PRNG) because it does not generate a truly random sequence when compared to a typical hardware random number generator.
The pseudo random number generator generates a sequence of numbers from an initial seed. Choosing a bad initial seed may result in an insufficiently random sequence. In cryptography, this means insecure cryptography. In other areas, this means that results may be predicted. Therefore, choosing a good seed is important to so that pseudo random number generators generate pseudo random sequences of sufficient efficacy so that, for example, cryptography is secure and the other results may not be easily predicted.
The efficacy of a seed may be increased by using/focusing on unpredictable events occurring in a system or on a platform from which to generate unpredictable numbers. In this, unpredictable numbers are usable to derive an initial seed of greater efficacy. If available, mouse movements, key strokes, network traffic, thermal noise, and electric noise all may be used as unpredictable events to generate unpredictable numbers.
However, not all sources of unpredictable numbers are available in every system or on every platform. For example, a mouse, keyboard, network, and/or fan may not be available in a diskless set top box platform or other embedded system. Even when sources of unpredictable numbers are available in a system or on a platform, some applications take too long to derive a good seed of desired efficacy. For example, a boot up process in some applications running on a PC may take more than 5 seconds to generate a secure pseudo random sequence. This is too long.
While the generation of sufficiently random sequences may be beneficial or even required for certain uses to increase security in cryptography and/or otherwise avoid easily predictable results, such tasks may be difficult in some systems, on some platforms, and using some applications that do not have hardware random number generators. Therefore, a secure, robust, platform-flexible, and fast technique of determining a good seed for use in cryptography or other areas may be beneficial.